﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using Model;

namespace Model
{
    public enum DSThietDat
    {
        None,
        LoaiDonVi,
        HuyenQuanID,
        XaPhuongID,
        DonViHuyenQuan,
        DonViXaPhuong,
        CoQuan_CapTren,
        CoQuan_ChiCuc,
        CoQuan_Email,
        CoQuan_DiaChi,
        CoQuan_CapHanhChinhID,
        CoQuan_TenDonViHanhChinh,
        CoQuan_DienThoai,
        CoQuan_ChiCucTruongID,
        CoQuan_SoQD
    }

    public static class ThietDatUtil
    {
        public static Hashtable hstThietDat = new Hashtable();

        public static string GetThietDat(DSThietDat loaiThietDat)
        {
            switch (loaiThietDat)
            {
                case DSThietDat.LoaiDonVi:
                    return (string)hstThietDat["LoaiDonVi"];
                case DSThietDat.HuyenQuanID:
                    return (string)hstThietDat["HuyenQuanID"];
                case DSThietDat.XaPhuongID:
                    return (string)hstThietDat["XaPhuongID"];
                case DSThietDat.DonViHuyenQuan:
                    return (string)hstThietDat["DonViHuyenQuan"];
                case DSThietDat.DonViXaPhuong:
                    return (string)hstThietDat["DonViXaPhuong"];
                case DSThietDat.CoQuan_CapTren:
                    return (string)hstThietDat["CoQuan_CapTren"];
                case DSThietDat.CoQuan_ChiCuc:
                    return (string)hstThietDat["CoQuan_ChiCuc"];
                case DSThietDat.CoQuan_Email:
                    return (string)hstThietDat["CoQuan_Email"];
                case DSThietDat.CoQuan_DiaChi:
                    return (string)hstThietDat["CoQuan_DiaChi"];
                case DSThietDat.CoQuan_CapHanhChinhID:
                    return (string)hstThietDat["CoQuan_CapHanhChinhID"];
                case DSThietDat.CoQuan_TenDonViHanhChinh:
                    return (string)hstThietDat["CoQuan_TenDonViHanhChinh"];
                case DSThietDat.CoQuan_DienThoai:
                    return (string)hstThietDat["CoQuan_DienThoai"];
                case DSThietDat.CoQuan_ChiCucTruongID:
                    return (string)hstThietDat["CoQuan_ChiCucTruongID"];
                case DSThietDat.CoQuan_SoQD:
                    return (string)hstThietDat["CoQuan_SoQD"];
            }

            return "";
        }

        public static int GetThietDat_IntValue(DSThietDat loaiThietDat)
        {
            try
            {
                return int.Parse(GetThietDat(loaiThietDat));
            }
            catch
            {
                return int.MinValue;
            }
        }

        public static int? GetThietDat_RealIntValue(DSThietDat loaiThietDat)
        {
            try
            {
                return int.Parse(GetThietDat(loaiThietDat));
            }
            catch
            {
                return null;
            }
        }

        public static bool GetThietDat_BooleanValue(DSThietDat loaiThietDat)
        {
            return (GetThietDat(loaiThietDat) != "0" && GetThietDat(loaiThietDat) != "False");
        }

        public static double GetThietDat_DoubleValue(DSThietDat loaiThietDat)
        {
            try
            {
                return decimal.ToDouble(decimal.Parse(GetThietDat(loaiThietDat)) / 10);
            }
            catch
            {
                return double.MinValue;
            }
        }

        public static void LoadThietDat()
        {
            Session.thietDatBOCollection = ThietDatBOCollection.GetThietDatBOCollection();

            if (Session.thietDatBOCollection != null)
            {
                hstThietDat.Clear();

                for (int i = 0; i < Session.thietDatBOCollection.Count; i++)
                    hstThietDat.Add(Session.thietDatBOCollection[i].LoaiThietDat, Session.thietDatBOCollection[i].GiaTri);
            }
        }

        public static void SetThietDat(DSThietDat loaiThietDat, string value, bool save)
        {
            string s = "";
            switch (loaiThietDat)
            {
                case DSThietDat.LoaiDonVi:
                    s = "LoaiDonVi";
                    break;
                case DSThietDat.HuyenQuanID:
                    s = "HuyenQuanID";
                    break;
                case DSThietDat.XaPhuongID:
                    s = "XaPhuongID";
                    break;
                case DSThietDat.DonViHuyenQuan:
                    s = "DonViHuyenQuan";
                    break;
                case DSThietDat.DonViXaPhuong:
                    s = "DonViXaPhuong";
                    break;
                case DSThietDat.CoQuan_CapTren:
                    s = "CoQuan_CapTren";
                    break;
                case DSThietDat.CoQuan_ChiCuc:
                    s = "CoQuan_ChiCuc";
                    break;
                case DSThietDat.CoQuan_Email:
                    s = "CoQuan_Email";
                    break;
                case DSThietDat.CoQuan_DiaChi:
                    s = "CoQuan_DiaChi";
                    break;
                case DSThietDat.CoQuan_CapHanhChinhID:
                    s = "CoQuan_CapHanhChinhID";
                    break;
                case DSThietDat.CoQuan_TenDonViHanhChinh:
                    s = "CoQuan_TenDonViHanhChinh";
                    break;
                case DSThietDat.CoQuan_DienThoai:
                    s = "CoQuan_DienThoai";
                    break;
                case DSThietDat.CoQuan_ChiCucTruongID:
                    s = "CoQuan_ChiCucTruongID";
                    break;
                case DSThietDat.CoQuan_SoQD:
                    s = "CoQuan_SoQD";
                    break;
            }

            hstThietDat[s] = value;
            if (save)
            {
                ThietDatBO thietDatBO = ThietDatBO.GetRootThietDatBO("LoaiThietDat=N'" + s + "'", true);
                if (thietDatBO.ThietDatID >= 0)
                {
                    thietDatBO.GiaTri = value;
                    thietDatBO = thietDatBO.Save();
                }
            }
        }

        public static void SetThietDat(DSThietDat loaiThietDat, string value)
        {
            SetThietDat(loaiThietDat, value, true);
        }

        public static void SetThietDat(DSThietDat loaiThietDat, bool value)
        {
            SetThietDat(loaiThietDat, (value ? "1" : "0"), true);
        }

        public static void SetThietDat(DSThietDat loaiThietDat, int value)
        {
            SetThietDat(loaiThietDat, value.ToString(), true);
        }

        public static void SetThietDat(DSThietDat loaiThietDat, int? value)
        {
            SetThietDat(loaiThietDat, (value.HasValue ? value.Value.ToString() : null), true);
        }

        public static void SetThietDat(DSThietDat loaiThietDat, double value)
        {
            SetThietDat(loaiThietDat, (value * 10).ToString(), true);
        }

        public static void SetThietDat(DSThietDat loaiThietDat, double? value)
        {
            SetThietDat(loaiThietDat, (value.HasValue ? (value.Value * 10).ToString() : null), true);
        }

        public static void SetThietDatNoSave(DSThietDat loaiThietDat, string value)
        {
            SetThietDat(loaiThietDat, value, false);
        }

        public static void SetThietDatNoSave(DSThietDat loaiThietDat, bool value)
        {
            SetThietDat(loaiThietDat, (value ? "1" : "0"), false);
        }

        public static void SetThietDatNoSave(DSThietDat loaiThietDat, int value)
        {
            SetThietDat(loaiThietDat, value.ToString(), false);
        }

        public static void SetThietDatNoSave(DSThietDat loaiThietDat, double value)
        {
            SetThietDat(loaiThietDat, (value * 10).ToString(), false);
        }
    }
}
